package com.example;

import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.HapiContext;
import ca.uhn.hl7v2.model.v24.datatype.NM;
import ca.uhn.hl7v2.model.v24.datatype.ST;
import ca.uhn.hl7v2.model.v25.datatype.DTM;
import ca.uhn.hl7v2.parser.CustomModelClassFactory;
import ca.uhn.hl7v2.parser.ModelClassFactory;
import ca.uhn.hl7v2.parser.PipeParser;
import com.example.HL7.v24.message.ZDY_RES;
import com.example.HL7.v24.segment.ZDS;

import java.text.SimpleDateFormat;

public class App {
    public static void main(String[] args) throws HL7Exception {
        //要解析的自定义HL7消息
        String hl7 = "MSH|^~\\&|T1|||T2^101|20210315184009.925+0800||ZDY^RES|ZDY_RES-20210315184009925|P|2.4|||NE|AL\r" +
                "ZDS|999|九九九|20210315184009.925+0800";

        //创建hapi上线文
        HapiContext context = new DefaultHapiContext();
        //获取解析器
        PipeParser parser = context.getPipeParser();
        //创建自定义类工厂，此处是重点，指向我们自定义消息的文件位置的外层（也就是版本号的上一层）
        ModelClassFactory factory = new CustomModelClassFactory("com.example.HL7");
        //将自定义工厂类设置到上下文中，以便hapi可以找到对应的自定义消息，并解析
        context.setModelClassFactory(factory);

        //解析
        ZDY_RES zdy_res = (ZDY_RES) parser.parse(hl7);
        ZDS zds = zdy_res.getZDS();
        NM roomNumber = zds.getRoomNumber();
        ST deptName = zds.getDeptName();
        DTM intoTime = zds.getIntoTime();
        System.out.println("病房号：" + roomNumber.getValue());
        System.out.println("科室：" + deptName.getValue());
        System.out.println("住院日期：" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(intoTime.getValueAsDate()));
    }
}
